package com.bookmall.member.web;

import com.alibaba.fastjson.JSON;
import com.bookmall.common.constant.DefaultDataConstants;
import com.bookmall.common.entity.to.MemberInfoTo;
import com.bookmall.common.utils.HttpUtils;
import com.bookmall.member.domain.MemberInfo;
import com.bookmall.member.domain.vo.SocialUser;
import com.bookmall.member.service.IMemberInfoService;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description:
 * @Author 胡菜鸡
 * @Create 2022-04-04-18:22
 */
@Controller
public class OAuthLoginController {
    @Autowired
    private IMemberInfoService memberInfoService;

    /**
     * 微博社交登录：
     *      1、引导需要授权的用户到如下地址：
     *          https://api.weibo.com/oauth2/authorize?client_id=钥匙ID&response_type=code&redirect_uri=重定向的地址
     *      2、用户跳转到 redirect_uri 的地址并携带 code 值
     *      3、通过 code 值换取用户的 AccessToken（在后台操作，因为 钥匙密码和AccessToken要保密）
     *          https://api.weibo.com/oauth2/access_token?client_id=钥匙ID&client_secret=钥匙密码&grant_type=authorization_code&redirect_uri=重定向的地址&code=上一步携带的code
     *      4、通过用户的 AccessToken 获取用户相关信息
     * @author 胡菜鸡
     * @date 2022/4/4 18:13
     */
    @GetMapping("/oauth2.0/weibo/success")
    public String weiboLogin(/*@RequestParam("code")*/ String code, HttpSession session) throws Exception {
        //根据code换取access_token
        Map<String, String> map = new HashMap<>();
        map.put("client_id", "1070192517");
        map.put("client_secret", "c95084a4f8705d57f1319c46ebfce6e6");
//        map.put("client_id", "3677300353");
//        map.put("client_secret", "f939ed78c0c4df9f7ce98079a0fecdcd");
        map.put("grant_type", "authorization_code");
        map.put("redirect_uri", "http://huyulu666.top/oauth2.0/weibo/success");
//        map.put("redirect_uri", "http://192.168.234.124:8888/api/oauth2.0/weibo/success");
        map.put("code", code);
        HttpResponse response = HttpUtils.doPost("https://api.weibo.com", "/oauth2/access_token", "post", new HashMap<>(), map, new HashMap<>());

        if(response.getStatusLine().getStatusCode() == 200){
            //获取到了access_token
            String json = EntityUtils.toString(response.getEntity());
            SocialUser socialUser = JSON.parseObject(json, SocialUser.class);
            /*
                知道当前是哪个社交用户
             */
            //1.如果用户是第一次进网站，自动注册进来（为当前社交用户生成一个会员信息账号，以后这个账号就对应此社交用户）
            //2.登录或者注册这个社交用户（通过uid判断是否第一次登录，是则进行注册并登录，否则直接登录）
            MemberInfo loginMember = memberInfoService.login(socialUser);
            if(loginMember != null){
                //成功，跳转到首页
                MemberInfoTo memberInfoVo = new MemberInfoTo();
                BeanUtils.copyProperties(loginMember, memberInfoVo);
                //登录成功，共享session数据
                session.setAttribute(DefaultDataConstants.LOGIN_USER, memberInfoVo);
                //前往首页
                return "redirect:http://huyulu666.top/index.html";
//                return "redirect:http://localhost:10000/index.html";
//                return "redirect:/oauth2.0/weibo/data";
            } else {
                //失败，返回登录页
                return "redirect:http://huyulu666.top/login.html";
            }
        } else {
            //没有获取到access_token
            return "redirect:http://huyulu666.top/login.html";
        }
    }

    @GetMapping("/oauth2.0/weibo/data")
    public String login(HttpSession session){
        System.out.println(session.getAttribute(DefaultDataConstants.LOGIN_USER));
        System.out.println(session.getId());
        return "redirect:http://huyulu666.top/index.html";
    }

}
